gaussian elimination with back substitution